package com.ruoyi.api.controller.wecom;

import com.ruoyi.api.controller.common.AbstractApiController;
import com.ruoyi.business.domain.vo.UserChatGroupStatisticVO;
import com.ruoyi.business.service.wecom.ITbWecomMsgArchiveService;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.YearMonth;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

/**
 * 小程序用户管理Controller
 */
@Validated
@Api(value = "企微会话存档", tags = {"企微会话存档"})
@RequiredArgsConstructor
@RestController
@RequestMapping("/api/miniapp/wecom/msg/archive")
public class ApiWecomMsgController extends AbstractApiController {

    @Resource
    private ITbWecomMsgArchiveService tbWecomMsgArchiveService;

    /**
     * 我的群活跃统计
     */
    @ApiOperation("我的群活跃统计")
    @GetMapping("/customerGroupActiveStats")
    public TableDataInfo<UserChatGroupStatisticVO> getCustomerGroupActiveStats(
        @ApiParam("kocDate") @RequestParam(required = true) String kocDate,
        PageQuery pageQuery) {
        long beginTime = getFirstDayOfMonthTimestamp(kocDate);
        long endTime = getFirstDayOfNextMonthTimestamp(kocDate);
        // 获取当前毫秒级时间戳 如果当前时间戳小于 endTime 则 endTime 为当前毫秒级时间戳
        long currentTime = System.currentTimeMillis();
        if (currentTime < endTime) {
            endTime = currentTime;
        }
        return tbWecomMsgArchiveService.getCustomerGroupActiveStatsPage(getUserId(), beginTime, endTime, pageQuery);
    }


    /**
     * 获取指定年月当月1号 00:00:00 的时间戳（毫秒）
     */
    public static long getFirstDayOfMonthTimestamp(String yearMonth) {
        // 解析年月字符串
        YearMonth ym = YearMonth.parse(yearMonth, DateTimeFormatter.ofPattern("yyyy-MM"));
        // 获取当月1号的 LocalDateTime（00:00:00）
        LocalDateTime firstDay = ym.atDay(1).atStartOfDay();
        // 转换为时间戳（毫秒）
        return firstDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
    }

    /**
     * 获取指定年月下个月1号 00:00:00 的时间戳（毫秒）
     */
    public static long getFirstDayOfNextMonthTimestamp(String yearMonth) {
        // 解析年月字符串
        YearMonth ym = YearMonth.parse(yearMonth, DateTimeFormatter.ofPattern("yyyy-MM"));
        // 获取下个月
        YearMonth nextMonth = ym.plusMonths(1);
        // 获取下个月1号的 LocalDateTime（00:00:00）
        LocalDateTime firstDayOfNextMonth = nextMonth.atDay(1).atStartOfDay();
        // 转换为时间戳（毫秒）
        return firstDayOfNextMonth.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
    }


}
